[iOS][Android] フォーマット文字列のパラメータ代入位置を指定する方法
n$
フォーマット文字列のパラメータの代入位置を指定するためには n$
という書式指示子を利用します。(n
は数字)
これは iOS, Android どちらも同じです。
("%3$s %1$s %2$s.", "I", "have", "failed") // -> failed I have.
サンプルコード
iOS
NSString *lastName = @"Tanaka"; NSString *firstName = @"Keisuke"; NSLog(@"私は %@ %@ です。", lastName, firstName); // -> 私は Tanaka Keisuke です。 NSLog(@"私は %2$@ %1$@ です。", lastName, firstName); // -> 私は Keisuke Tanaka です。
Android
Formatter formatter; String lastName = "Tanaka"; String firstName = "Keisuke"; formatter = new Formatter(); formatter.format("I am %s %s.", lastName, firstName); System.out.println(formatter); // -> I am Tanaka Keisuke. formatter = new Formatter(); formatter.format("I am %2$s %1$s.", lastName, firstName); System.out.println(formatter); // -> I am Keisuke Tanaka.
使いどころ
私が経験した、使えるポイントは「ローカライズ時の文字列」です。
年月日 の表示など日本語と英語で順序が違う場合、言語ごとのフォーマット文字列を用意するだけで、コードを分岐することなく期待する項目を表示することができます。
例(iOS)
Localizable.strings(日本語用)
"ReleaseDate" = "%1$d 年 %2$d 月 %3$d 日";
Localizable.strings(英語用)
"ReleaseDate" = "%2$d / %3$d, %1$d";
実装
NSInteger year = 2016; NSInteger month = 6; NSInteger day = 28; NSLog(NSLocalizedString(@"ReleaseDate", nil), year, month, day);
実行結果
日本語環境: 2016 年 6 月 28 日 英語環境: 6 / 28, 2016
このようにパラメータの順序は固定のまま代入する箇所を変更することができます。
覚えておくといいことがあるかもしれません。
リンク
ミレニアム・ファルコン製作日記 #18
18 号 表紙
パーツ
成果
今回の作業は以下の 2 つでした。
- 外殻フレームを展開する
- 通路アーチを組み立てる
これまで取り付けた外殻フレームに 3 つのフレームを追加しました。
これで船体下部フレームの 3 分の 1 が出来上がりました。
たまにビスがフレームと噛み合わない部分があって怖いですが、すぐに取れそうという感じでもないので大丈夫でしょう、きっと。
出ました、通路アーチの組み立て。
細かいクッションに接着剤を付けて、という例のアレです。
面倒だと思いながらもこれまで数をこなしてきたおかげで、かなりスムーズに作業を進められるようになりました。
もう「通路アーチマスター」を名乗ってもいいでしょう。(心はダークサイドに堕ちてきましたが・・・)
LEGO®スター・ウォーズ/フォースの覚醒
今回の例題で出した 2016 年 6 月 28 日
という日付は、海外における LEGO®スター・ウォーズ/フォースの覚醒 の発売日です。
日本での発売日は 2016 年 10 月 13 日
なので、一刻も早く遊びたい人は海外版を買ってみるのもいいと思います。
それではまた次回。
May the Force be with you!